Structure
Project Structure
vdkctv/
.storybook/ -> Storybook configuration
[build] -> Generated folder containing compiled code
docker/ -> Folder for automated CI/CD processes
docs/ -> Local documentation files, which can be browsed in Github
generators/ -> Folder for generators templates for starting Elevate projects
helpers/ -> Helper files i.e: User Mock server, generating prod package.json or starting dev servers
[node_modules] -> Generated folder where all NPM dependencies will be downloaded
platforms/ -> Specific to certain platforms (e.g. Java files for AndroidTV)
src/ -> Main code folder
__mocks__/ -> mocks
__tests__/ -> Unit tests
client/ -> Client side entry
components/ -> Stateless 'dumb' presentational components
config/ -> Routes, templates, app and server configurations
containers/ -> Stateful 'smart' components
context/ -> React Context related files
hooks/ -> React Hooks related files
models/ -> Models consumed from the services and view
providers/ -> React Providers related files
services/ -> Collected services
static/ -> Static files such the index.ejs template
theme/ -> Breakpoints and theme values
utils/ -> Functions to be used in different parts of the app
views/ -> Views components for every defined route
webpack -> webpack configurations for DEV and PROD
[coverage] -> Code coverage information (created by `npm test`)
.browserslist -> BrowserList to target specific browsers with babel transpile
.eslintignore -> ESLint ignore patterns
.eslintrc.js -> ESLint configuration
.gitignore -> Git ignore patterns
.prettierrc -> Prettier configuration
.stylelintrc.js -> Style ling configuration
adr.md -> Architecture decision records file
babel.config.js -> Babel transpiling configuration
changelog.md -> Changes register file
CONTRIBUTING.md -> Guidance for contributions
[db.json] -> Json with login information for dev purposes
jest.config.js -> Jest testing framework configuration
jsdoc.js -> Configuration file for JSDoc static generation
KNOWN_ISSUES.md -> Record file with known issues of the application
package.json -> NPM project definition file. Dependencies, scripts and configuration
README.md -> Read me file
tscheck.json -> Check for TS files
tsconfig.json -> Typescript configuration file. Allow us to use alias within VSCode
tsling.json
Notes
- Names wrapped in
[]
are not tracked by Git. src/client/client.js
: Only called in the client app
Conventions
We try to use a structure including a folder with an index and a main javascript file with the logic. Views folder is not following that due to react-suspense strategy. This way we can import the folder without specify the file or the need of import an index and coherce the specific module wihin a constant
Folder structure
src/
services/
i18n/
index.js -> just exports the i18n import
i18n.js -> exports all the required modules
Consuming modules
import i18n from "#/services/i18n"
High-Level App Structure
Both entry points will import two important sections, although they will configure them in a different manner:
src/containers/App/App.js
:- Contains the
AppContent
orAppShell
- Holds components like the
WelcomeMessage
in web or handles the key listeners on TV - It is outside of the router
- Contains the
src/config/routes.js
will be passed to React Routersrc/views/ViewContainer/ViewContainer.js
:- The layout wrapper applied to all routes
src/views/VikimapPege/ModularPage.js
:- One of the most important views, will use the route to fetch Accedo One and render the entries
Module Aliases
We use path alliases to improve the readability of the code.
Original
import i18n from '../../../services/i18n';
With Aliases
import i18n from '#/services/i18n';
If you need more info about module aliases configurations for all the involved tools please check the next links
- Project configuration files
tsconfig.json
--> alias for Visual Code Studio. We can navigate to the module by clicking on it with command/control + clickwebpack/alias.js
--> Exports the alias to enable the build of the client applicationjest.config.js
--> Jest configuration to resolve the alias with the testing framwork
- Documentation of the tools